From 37a561eb53ae42e5d786eed1309fd17b872c6ee1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Exp=C3=B3sito?= Date: Mon, 20 Sep 2021 20:00:04 +0200 Subject: [PATCH] gdk/x11: Handle high-resolution scroll events --- gdk/x11/gdkdevicemanager-xi2.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index a146333b5d..44e3342338 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -1729,6 +1729,7 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, &xev->valuators, &delta_x, &delta_y)) { GdkModifierType state; + GdkScrollDirection direction; GDK_DISPLAY_NOTE (display, EVENTS, g_message ("smooth scroll: \n\tdevice: %u\n\tsource device: %u\n\twindow %ld\n\tdeltas: %f %f", @@ -1737,21 +1738,19 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, state = _gdk_x11_device_xi2_translate_state (&xev->mods, &xev->buttons, &xev->group); + if (delta_x > 0) + direction = GDK_SCROLL_RIGHT; + else if (delta_x < 0) + direction = GDK_SCROLL_LEFT; + else if (delta_y > 0) + direction = GDK_SCROLL_DOWN; + else + direction = GDK_SCROLL_UP; + if (gdk_device_get_source (source_device) != GDK_SOURCE_TOUCHPAD && ((delta_x == 0.0 && ABS (delta_y) == 1.0) || (ABS (delta_x) == 1.0 && delta_y == 0.0))) { - GdkScrollDirection direction; - - if (delta_x > 0) - direction = GDK_SCROLL_RIGHT; - else if (delta_x < 0) - direction = GDK_SCROLL_LEFT; - else if (delta_y > 0) - direction = GDK_SCROLL_DOWN; - else - direction = GDK_SCROLL_UP; - event = gdk_scroll_event_new_discrete (surface, device, NULL, @@ -1759,6 +1758,17 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, state, direction); } + else if (gdk_device_get_source (source_device) == GDK_SOURCE_MOUSE) + { + event = gdk_scroll_event_new_value120 (surface, + device, + NULL, + xev->time, + state, + direction, + delta_x * 120.0, + delta_y * 120.0); + } else { event = gdk_scroll_event_new (surface, -- 2.30.2